/**
 * new
 * 如果一个函数被new操作符调用了，那他就成为了一个构造函数
 * ①在内存中创建一个新对象
 * ②这个对象内部的[[prototype]]属性会被赋值为该构造函数的prototype属性
 * ③构造函数内的this会指向创建出来的新对象
 * ④执行函数内部的代码（函数体代码）
 * ⑤如果构造函数没有返回非空对象，则返回创建出来的对象
 *
 * 约定俗成：构造函数的首字母一般大写
 */
function Person(name, age) {
  this.name = name
  this.age = age
  this.eating = () => {
    console.log(this.name, 'is eating')
  }
}

var p1 = new Person('li', 13)
var p2 = new Person('dd', 18)
console.log(p1)
p1.eating()
p2.eating()
console.log(p1.eating === p2.eating)//false
//缺点：构造函数为每个对象的函数都创建一个函数的对象实例
